package com.mezz.bones.framework.base.util;
import java.util.HashSet;
import java.util.Set;

/**
 * @Author: zhuang
 * @Date: 2024/8/12 14:18
 * @Description: TODO
 * @Version: 1.0
 **/

public class ClassUtil {

    /**
     * 递归获取类及其父类实现的所有接口 不包含接口继承的父接口
     *
     * A extends B   B implement C  C extend InterfaceD
     * getAllInterfaces(A) -> 只能获取到C
     *
     * @param clazz 要查找的类
     * @return 一个包含所有接口的集合
     */
    public static Set<Class<?>> getAllInterfaces(Class<?> clazz) {
        Set<Class<?>> interfaces = new HashSet<>();
        while (clazz != null && clazz != Object.class) {
            // 获取当前类直接实现的接口
            Class<?>[] currentInterfaces = clazz.getInterfaces();
            for (Class<?> anInterface : currentInterfaces) {
                interfaces.add(anInterface);
            }
            // 继续查找父类
            clazz = clazz.getSuperclass();
        }
        return interfaces;
    }

}
